//
//  Tool.h
//  天利娱乐算法
//
//  Created by MC on 2017/6/5.
//  Copyright © 2017年 MC. All rights reserved.
//

#import <Foundation/Foundation.h>
#define Factor(n) [Tool Factorial:n]

#define ACombination(n,m) [Tool ACombinationWithN:n andM:m]
#define CCombination(n,m) [Tool CCombinationWithN:n andM:m]
#define SameArr(A,B)[Tool GetSameNuminFirestArr:A andSecondArr:B]
#define SameArrS(A,B,C)[Tool GetSameNuminFirestArr:A andSecondArr:B andThirdArr:C]

/*
 * 任选复式类型
 */
typedef NS_ENUM(NSInteger, Type_Optional_Double) {
    Optional_Double_ONE_TO_ONE=1,//默认从0开始//一中一
    Optional_Double_TWO_TO_TWO,//二中二
    Optional_Double_THREE_TO_THREE,//三中三
    Optional_Double_FOUR_TO_FOUR,//四中四
    Optional_Double_FIRE_TO_FIRE,//五中五
    Optional_Double_SIX_TO_FIRE,//六中五
    Optional_Double_SEVEN_TO_FIRE,//七中五
    Optional_Double_EIGHT_TO_FIRE,//八中五
};

/*
 * 任选胆拖类型
 */
typedef NS_ENUM(NSInteger, Type_Optional_Duplex) {
    Optional_Duplex_TWO_TO_TWO=2,//默认从0开始//二中二
    Optional_Duplex_THREE_TO_THREE,//三中三
    Optional_Duplex_FOUR_TO_FOUR,//四中四
    Optional_Duplex_FIRE_TO_FIRE,//五中五
    Optional_Duplex_SIX_TO_FIRE,//六中五
    Optional_Duplex_SEVEN_TO_FIRE,//七中五
};


@interface Tool : NSObject

/*
 * n!阶乘
 */
+(double)Factorial:(int)n;
/*
 * A(m,n) 排列
 */
+(double)ACombinationWithN:(int)n andM:(int)m;
/*
 * C(m,n) 组合
 */
+(double)CCombinationWithN:(int)n andM:(int)m;

/*
 * 获取一个随机整数范围在：[start,end]包括start，包括end
 * 传入生成随机数的范围，起始值和结束值
 * 数组里面的数字不重复
 */
+(NSArray *)GetRandomDifArrWithStart:(int)start End:(int)end AndLength:(int)length;
#pragma mark-----十一选五(算法)
/*
 * 任选复式
 * type：任选复式类型
 * CCombination(所选球的个数,type )
 */
+(int)GetOptional_DoubleWithType:(Type_Optional_Double)type andN:(int)n;

/*
 * 任选胆拖
 * TMcode:拖码的个数
 * DMcode:胆码的个数
 * CCombination(拖码的个数,type-胆码的个数)
 *
 */
+(int)GetOptional_DuplexWithType:(Type_Optional_Duplex)type andTMcode:(int)TMcode andDMcode:(int)DMcode;

/*
 * 前一
 * 注数=所选号码的个数
 * num:所选球的个数
 */
+(int)Get_Before_OneWithNum:(int)num;
/*
 * 不定胆
 * num:所选球的个数
 */
+(int)Get_Unsure_DanWithNum:(int)num;
#pragma 前二系列
/*
 * 前二
 * 直选复式
 *
 */
+(int)Get_Before_Two_DirectDoubleWithFirstArr:(NSArray *)firstArr andSecondArr:(NSArray *)secondArr;

/*
 * 前二
 * 直选组合
 * num:所选球的个数
 */
+(int)Get_Before_Two_DirectCombinationWithNum:(int)num;

/*
 * 前二
 * 直选胆拖
 *
 */
+(int)Get_Before_Two_DirectDTWithTMcode:(int)TMcode;

/*
 * 前二
 * 组选复式
 *
 */
+(int)Get_Before_Two_GroupDoubleWithNum:(int)num;

/*
 * 前二
 * 组选胆拖
 *
 */
+(int)Get_Before_Two_GroupDTWithTMcode:(int)TMcode;

/*
 * 前二
 * 所有单式玩法
 * 注数=空格隔开的号码个数
 */
+(int)Get_Before_Two_SimplexWithArr:(NSArray *)arr;


#pragma 前三系列
/*
 * 前三
 * 直选复式
 *
 */
+(int)Get_Before_Three_DirectDoubleWithFirstArr:(NSArray *)firstArr andSecondArr:(NSArray *)secondArr andThirdArr:(NSArray *)thirdArr;

/*
 * 前三
 * 直选组合
 *
 */
+(int)Get_Before_Three_DirectCombinationWithNum:(int)num;

/*
 * 前三
 * 直选胆拖
 *
 */
+(int)Get_Before_Three_DirectDTWithTMcode:(int)TMcode andDMcode:(int)DMcode;

/*
 * 前三
 * 组选复式
 *
 */
+(int)Get_Before_Three_GroupDoubleWithNum:(int)num;

/*
 * 前三
 * 组选胆拖
 *
 */
+(int)Get_Before_Three_GroupDTWithTMcode:(int)TMcode andDMcode:(int)DMcode;

/*
 * 前三
 * 所有单式玩法
 * 注数=空格隔开的号码个数
 */
+(int)Get_Before_Three_SimplexWithArr:(NSArray *)arr;

/*
 * 定位胆
 */
+(int)Get_LocationDWithFirstArr:(NSArray *)firstArr andSecondArr:(NSArray *)secondArr andThirdArr:(NSArray *)thirdArr;


/*
 * 任选单式
 *
 * 注数=空格隔开的号码个数
 */
+(int)Get_SimplexWithArr:(NSArray *)arr;


#pragma mark==================================重庆时时彩====================================

/*
 * 五星
 * 直选复式
 * 注数 =CCombination(Arr1.count,1)
       *CCombination(Arr2.count,1)
       *CCombination(Arr3.count,1)
       *CCombination(Arr4.count,1)
       *CCombination(Arr5.count,1)
 */
+(int)Get_Star_Five_DirectDoubleWithFirstArr:(NSArray *)firstArr andSecondArr:(NSArray *)secondArr andThirdArr:(NSArray *)thirdArr andFourthArr:(NSArray *)fourthArr andFifthArr:(NSArray *)fifthArr;


@end




















